home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / TextServices.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  16KB  |  457 lines

  1. /*
  2.      File:        TextServices.h
  3.  
  4.      Contains:    Text Services Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __TEXTSERVICES__
  19. #define __TEXTSERVICES__
  20.  
  21. #ifndef __CONDITIONALMACROS__
  22. #include <ConditionalMacros.h>
  23. #endif
  24. #ifndef __TYPES__
  25. #include <Types.h>
  26. #endif
  27. #ifndef __EVENTS__
  28. #include <Events.h>
  29. #endif
  30. #ifndef __MENUS__
  31. #include <Menus.h>
  32. #endif
  33. #ifndef __AEDATAMODEL__
  34. #include <AEDataModel.h>
  35. #endif
  36. #ifndef __AEREGISTRY__
  37. #include <AERegistry.h>
  38. #endif
  39. #ifndef __COMPONENTS__
  40. #include <Components.h>
  41. #endif
  42. #if FOR_SYSTEM8_PREEMPTIVE
  43. #ifndef __TEXTOBJECTS__
  44. #include <TextObjects.h>
  45. #endif
  46. #ifndef __LOCALEOBJECTS__
  47. #include <LocaleObjects.h>
  48. #endif
  49. #ifndef __COLLECTIONS__
  50. #include <Collections.h>
  51. #endif
  52. #ifndef __HILISTTYPES__
  53. #include <HIListTypes.h>
  54. #endif
  55. #ifndef __HIWINDOWTYPES__
  56. #include <HIWindowTypes.h>
  57. #endif
  58. #endif
  59.  
  60. #ifdef __cplusplus
  61. extern "C" {
  62. #endif
  63.  
  64. #if PRAGMA_IMPORT_SUPPORTED
  65. #pragma import on
  66. #endif
  67.  
  68. #if PRAGMA_ALIGN_SUPPORTED
  69. #pragma options align=mac68k
  70. #endif
  71.  
  72. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  73.  
  74. enum {
  75.     kTextService                = 'tsvc',                        /* component type for the component description */
  76.     kInputMethodService            = 'inpm',                        /* component subtype for the component description */
  77.     kTSMVersion                    = 0x0200,                        /* Version of the Text Services Manager is 2.0  */
  78.     kTextServiceVersion2        = 'tsv2'                        /* Interface type for V2 interfaces */
  79. };
  80.  
  81. /* Standard collection tags*/
  82.  
  83. enum {
  84.     kInteractiveServicesTag        = 'tmin',
  85.     kLocaleIDTag                = 'loce',
  86.     kTextInputObjectTag            = 'tiot',
  87.     kLocaleObjectRefTag            = 'lobj',
  88.     kLocaleRefTag                = 'lref',
  89.     kKeyboardInputMethodContextTag = 'kinp',
  90.     kKeyboardLocaleObjectRefTag    = 'kilo',
  91.     kHandwritingInputMethodContextTag = 'hinp',
  92.     kHandwritingLocaleObjectRefTag = 'hilo',
  93.     kSpeechInputMethodContextTag = 'sinp',
  94.     kSpeechLocaleObjectRefTag    = 'silo',
  95.     kPasswordModeTag            = 'pwdm',
  96.     kRefconTag                    = 'refc',
  97.     kUseFloatingWindowTag        = 'uswm',
  98.     kReadOnlyDocumentTag        = 'isro',
  99.     kSupportsMultiInlineHolesTag = 'minl',
  100.     kProtocolVersionTag            = 'nprt',
  101.     kTSMContextCollectionTag    = 'tsmx'
  102. };
  103.  
  104. /* Standard tags for input method modes*/
  105.  
  106. enum {
  107.     kIMRomanInputMode            = 'romn',
  108.     kIMPasswordInputMode        = 'pasw',
  109.     kIMXingInputMode            = 'xing',
  110.     kIMHuaInputMode                = 'huam',
  111.     kIMPinyinInputMode            = 'piny',
  112.     kIMQuweiInputMode            = 'quwe',
  113.     kIMCangjieInputMode            = 'cgji',
  114.     kIMJianyiInputMode            = 'jnyi',
  115.     kIMZhuyinInputMode            = 'zhuy',
  116.     kIMB5CodeInputMode            = 'b5cd',
  117.     kIMKatakanaInputMode        = 'kata',
  118.     kIMHiraganaInputMode        = 'hira'
  119. };
  120.  
  121. /* Variant tags for the input modes*/
  122.  
  123. enum {
  124.     kIM2ByteInputMode            = '2byt',
  125.     kIM1ByteInputMode            = '1byt',
  126.     kIMDirectInputMode            = 'dinp'
  127. };
  128.  
  129. /* Text Services LocaleObject Attributes*/
  130. #define kKeyboardInputMethodTypeName         "\pkeyboardinputmethod"
  131. #define kHandwritingInputMethodTypeName     "\phandwritinginputmethod"
  132. #define kSpeechInputMethodTypeName             "\pspeechinputmethod"
  133. #define kTokenizeServiceTypeName            "\ptokenizetextservice"
  134. #define kInteractiveTextServiceTypeName        "\pinteractivetextservice"
  135. #define kInputMethodModeName                "\pinputmethodmode"
  136. #define kInputMethodModeVariantName            "\pinputmethodvariantmode"
  137.  
  138. enum {
  139.     kNeedsInputWindow            = 1,
  140.     kHandlesUpdateRegion        = 2,
  141.     kHandlesGetRegion            = 3,
  142.     kHandlesPos2Offset            = 4,
  143.     kHandlesOffset2Pos            = 5,
  144.     kInPasswordMode                = 6,
  145.     kHandleMultipleHoles        = 7,
  146.     kDocumentIsReadOnly            = 8
  147. };
  148.  
  149. #endif
  150. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  151.  
  152. enum {
  153.                                                                 /* Component Flags in ComponentDescription */
  154.     bTakeActiveEvent            = 15,                            /* bit set if the component takes active event */
  155.     bHandleAERecording            = 16,                            /* bit set if the component takes care of recording Apple Events <new in vers2.0> */
  156.     bScriptMask                    = 0x00007F00,                    /* bit 8 - 14 */
  157.     bLanguageMask                = 0x000000FF,                    /* bit 0 - 7  */
  158.     bScriptLanguageMask            = bScriptMask + bLanguageMask    /* bit 0 - 14  */
  159. };
  160.  
  161.  
  162. enum {
  163.                                                                 /* Low level routines which are dispatched directly to the Component Manager */
  164.     kCMGetScriptLangSupport        = 0x0001,                        /* Component Manager call selector 1 */
  165.     kCMInitiateTextService        = 0x0002,                        /* Component Manager call selector 2 */
  166.     kCMTerminateTextService        = 0x0003,                        /* Component Manager call selector 3 */
  167.     kCMActivateTextService        = 0x0004,                        /* Component Manager call selector 4 */
  168.     kCMDeactivateTextService    = 0x0005,                        /* Component Manager call selector 5 */
  169.     kCMTextServiceEvent            = 0x0006,                        /* Component Manager call selector 6 */
  170.     kCMGetTextServiceMenu        = 0x0007,                        /* Component Manager call selector 7 */
  171.     kCMTextServiceMenuSelect    = 0x0008,                        /* Component Manager call selector 8 */
  172.     kCMFixTextService            = 0x0009,                        /* Component Manager call selector 9 */
  173.     kCMSetTextServiceCursor        = 0x000A,                        /* Component Manager call selector 10 */
  174.     kCMHidePaletteWindows        = 0x000B                        /* Component Manager call selector 11 */
  175. };
  176.  
  177. /* extract Script/Language code from Component flag ... */
  178. #define        mGetScriptCode(cdRec)        ((ScriptCode)    ((cdRec.componentFlags & bScriptMask) >> 8))
  179. #define        mGetLanguageCode(cdRec)        ((LangCode)        cdRec.componentFlags & bLanguageMask)
  180. #endif
  181. #if FOR_SYSTEM8_PREEMPTIVE
  182. struct TSMServiceSpecification {
  183.     StringPtr                         objectName;
  184.     ItemCount                         countPairs;
  185.     NameValuePair *                    pairs;
  186. };
  187. typedef struct TSMServiceSpecification TSMServiceSpecification;
  188.  
  189. typedef TSMServiceSpecification *TSMServiceSpecificationPtr;
  190. /* New opaque definitions for types*/
  191. typedef struct OpaqueTSMContext* TSMContext;
  192. typedef struct OpaqueTSMServiceContextRef* TSMServiceContextRef;
  193. #endif
  194. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  195. /* New opaque definitions for types*/
  196. typedef struct OpaqueTSMDocumentID* TSMDocumentID;
  197. typedef OSType InterfaceTypeList[1];
  198. #endif
  199. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  200. /* Text Service Info List */
  201. struct TextServiceInfo {
  202.     Component                         fComponent;
  203.     Str255                             fItemName;
  204. };
  205. typedef struct TextServiceInfo TextServiceInfo;
  206.  
  207. typedef TextServiceInfo *TextServiceInfoPtr;
  208. struct TextServiceList {
  209.     short                             fTextServiceCount;            /* number of entries in the 'fServices' array */
  210.     TextServiceInfo                 fServices[1];                /* Note: array of 'TextServiceInfo' records follows */
  211. };
  212. typedef struct TextServiceList TextServiceList;
  213.  
  214. typedef TextServiceList *TextServiceListPtr;
  215. typedef TextServiceListPtr *TextServiceListHandle;
  216. struct ScriptLanguageRecord {
  217.     ScriptCode                         fScript;
  218.     LangCode                         fLanguage;
  219. };
  220. typedef struct ScriptLanguageRecord ScriptLanguageRecord;
  221.  
  222. struct ScriptLanguageSupport {
  223.     short                             fScriptLanguageCount;        /* number of entries in the 'fScriptLanguageArray' array */
  224.     ScriptLanguageRecord             fScriptLanguageArray[1];    /* Note: array of 'ScriptLanguageRecord' records follows */
  225. };
  226. typedef struct ScriptLanguageSupport ScriptLanguageSupport;
  227.  
  228. typedef ScriptLanguageSupport *ScriptLanguageSupportPtr;
  229. typedef ScriptLanguageSupportPtr *ScriptLanguageSupportHandle;
  230. #endif
  231. #if FOR_SYSTEM8_PREEMPTIVE
  232. /* Low level TSMContext routines */
  233. extern OSStatus NewTSMContext(TSMContext *context, LocaleRef locale, long refcon);
  234.  
  235. extern OSStatus DeleteTSMContext(TSMContext context);
  236.  
  237. extern OSStatus OpenTSMService(TSMContext context, LocaleObjectRef service);
  238.  
  239. extern OSStatus CloseTSMService(TSMContext context);
  240.  
  241. extern OSStatus GetTSMService(TSMContext context, TSMServiceSpecification *serviceSpec, LocaleObjectRef *service);
  242.  
  243. extern OSStatus NextTSMService(TSMContext context, LocaleObjectRef *service);
  244.  
  245. extern OSStatus GetTSMRefcon(TSMContext context, long *refcon);
  246.  
  247. extern OSStatus SetTSMRefcon(TSMContext context, long refcon);
  248.  
  249. extern OSStatus GetTSMLocale(TSMContext context, LocaleRef *locale);
  250.  
  251. extern OSStatus SetTSMLocale(TSMContext context, LocaleRef locale);
  252.  
  253. extern void *GetSOMObjectFromTSMContext(TSMContext context);
  254.  
  255. extern OSStatus AddTSMContextCollectionItem(TSMContext context, CollectionTag itemTag, UInt32 id, ByteCount itemSize, void *itemData);
  256.  
  257. extern OSStatus GetTSMContextCollectionItemData(TSMContext context, CollectionTag tag, UInt32 id, ByteCount sizeAllowed, ByteCount *sizeReturned, void *itemData);
  258.  
  259. extern OSStatus RemoveTSMContextCollectionItem(TSMContext context, CollectionTag itemTag, UInt32 id);
  260.  
  261. #endif
  262. #if FOR_SYSTEM8_COOPERATIVE
  263. /* Text Service Info List */
  264. struct InlineEditInfo {
  265.     UInt32                             fStart;
  266.     UInt32                             fEnd;
  267.     TextObject                         fText;
  268. };
  269. typedef struct InlineEditInfo InlineEditInfo;
  270.  
  271. typedef InlineEditInfo *InlineEditInfoPtr;
  272. /* New handler routines */
  273. extern OSStatus SetTSMEnabled(Boolean state);
  274.  
  275. extern OSStatus SetTSMDocumentPasswordMode(TSMDocumentID idocID, Boolean Enabled);
  276.  
  277. extern OSStatus AddTSMDocumentCollectionItem(TSMDocumentID idocID, CollectionTag itemTag, UInt32 id, ByteCount itemSize, void *itemData);
  278.  
  279. extern OSStatus GetTSMDocumentCollectionItemData(TSMDocumentID idocID, CollectionTag tag, UInt32 id, ByteCount sizeAllowed, ByteCount *sizeReturned, void *itemData);
  280.  
  281. extern OSStatus RemoveTSMDocumentCollectionItem(TSMDocumentID idocID, CollectionTag itemTag, UInt32 id);
  282.  
  283. extern OSStatus ReleaseTSMDocumentInlineHoles(TSMDocumentID idocID);
  284.  
  285. /* Low level TSMContext routines */
  286. extern OSStatus FixTSMContext(TSMContext context);
  287.  
  288. extern OSStatus ActivateTSMContext(TSMContext context);
  289.  
  290. extern OSStatus DeactivateTSMContext(TSMContext context);
  291.  
  292. #if FOR_PTR_BASED_AE
  293. extern OSStatus EditInlineRegion(TSMContext context, AppleEvent *theEvent);
  294.  
  295. #endif
  296. extern OSStatus ReleaseTSMContextInlineHoles(TSMContext context);
  297.  
  298. extern OSStatus TSMContextUseFloatingWindow(TSMContext context, Boolean useWindow);
  299.  
  300. extern OSStatus TSMContextSetPasswordMode(TSMContext context, Boolean Enabled);
  301.  
  302. extern Boolean GetTSMFeature(TSMContext context, UInt32 feature);
  303.  
  304. extern HILayerRef GetTSMHILayer(void );
  305.  
  306. /* Text service developer API's */
  307. extern OSStatus TSMRegisterMenu(TSMContext context, HIMenu *menu);
  308.  
  309. #if FOR_PTR_BASED_AE
  310. extern OSStatus GetTSMUpdateEvent(AppleEvent **theAppleEvent, TSMContext context, TextObject theText, long fixLen, ReplaceRangeArrayPtr updateRng, HiliteRangeArrayPtr hiliteRng, ClauseOffsetArrayPtr clauseRgn, TextRegionRangePtr pinRange, UInt32 InlineHoleID);
  311.  
  312. extern OSStatus GetTSMPosToOffsetEvent(AppleEvent **theAppleEvent, TSMContext context, Point point, Boolean Dragging);
  313.  
  314. extern OSStatus GetTSMOffsetToPosEvent(AppleEvent **theAppleEvent, TSMContext context, ByteOffset offset, UInt32 InlineHoleID);
  315.  
  316. extern OSStatus GetTSMGetRegionEvent(AppleEvent **theAppleEvent, TSMContext context, GetRegionClass requestType, GetRegionRangePtr requestRange, UInt32 InlineHoleID);
  317.  
  318. extern OSStatus GetTSMShowHideWindowEvent(AppleEvent **theAppleEvent, TSMContext context, Boolean showIt, Boolean InquireState);
  319.  
  320. extern OSStatus GetTSMServiceChangedEvent(AppleEvent **theAppleEvent, TSMContext context);
  321.  
  322. extern OSStatus GetTSMReplyEvent(AppleEvent **theAppleEvent, TSMContext context);
  323.  
  324. extern OSStatus AESendFromTSMService(TSMContext context, const AppleEvent *theAppleEvent, AppleEvent *reply);
  325.  
  326. #endif
  327. extern OSStatus PostTSMText(TSMContext context, TextObject text);
  328.  
  329. extern OSStatus GetTSMFloatingWindowGlobalRect(TSMContext context, Rect *globalRect);
  330.  
  331. #endif
  332. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  333. /* High level TSM Doucment routines */
  334. extern pascal OSErr NewTSMDocument(short numOfInterface, InterfaceTypeList supportedInterfaceTypes, TSMDocumentID *idocID, long refcon)
  335.  TWOWORDINLINE(0x7000, 0xAA54);
  336.  
  337. extern pascal OSErr DeleteTSMDocument(TSMDocumentID idocID)
  338.  TWOWORDINLINE(0x7001, 0xAA54);
  339.  
  340. extern pascal OSErr ActivateTSMDocument(TSMDocumentID idocID)
  341.  TWOWORDINLINE(0x7002, 0xAA54);
  342.  
  343. extern pascal OSErr DeactivateTSMDocument(TSMDocumentID idocID)
  344.  TWOWORDINLINE(0x7003, 0xAA54);
  345.  
  346. extern pascal Boolean SetTSMCursor(Point mousePos)
  347.  TWOWORDINLINE(0x7006, 0xAA54);
  348.  
  349. extern pascal OSErr FixTSMDocument(TSMDocumentID idocID)
  350.  TWOWORDINLINE(0x7007, 0xAA54);
  351.  
  352. /* Utilities */
  353. extern pascal OSErr UseInputWindow(TSMDocumentID idocID, Boolean useWindow)
  354.  TWOWORDINLINE(0x7010, 0xAA54);
  355.  
  356. #endif
  357. #if FOR_SYSTEM7_ONLY
  358. /* Redundant Utilities */
  359. extern pascal OSErr SendAEFromTSMComponent(const AppleEvent *theAppleEvent, AppleEvent *reply, AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks, AEIdleUPP idleProc, AEFilterUPP filterProc)
  360.  TWOWORDINLINE(0x700B, 0xAA54);
  361.  
  362. extern pascal OSErr NewServiceWindow(void *wStorage, const Rect *boundsRect, ConstStr255Param title, Boolean visible, short theProc, WindowPtr behind, Boolean goAwayFlag, ComponentInstance ts, WindowPtr *window)
  363.  TWOWORDINLINE(0x7011, 0xAA54);
  364.  
  365. extern pascal OSErr CloseServiceWindow(WindowPtr window)
  366.  TWOWORDINLINE(0x7012, 0xAA54);
  367.  
  368. extern pascal OSErr GetFrontServiceWindow(WindowPtr *window)
  369.  TWOWORDINLINE(0x7013, 0xAA54);
  370.  
  371. extern pascal short FindServiceWindow(Point thePoint, WindowPtr *theWindow)
  372.  TWOWORDINLINE(0x7017, 0xAA54);
  373.  
  374. extern pascal OSErr SetDefaultInputMethod(Component ts, ScriptLanguageRecord *slRecordPtr)
  375.  TWOWORDINLINE(0x700C, 0xAA54);
  376.  
  377. extern pascal OSErr GetDefaultInputMethod(Component *ts, ScriptLanguageRecord *slRecordPtr)
  378.  TWOWORDINLINE(0x700D, 0xAA54);
  379.  
  380. extern pascal OSErr SetTextServiceLanguage(ScriptLanguageRecord *slRecordPtr)
  381.  TWOWORDINLINE(0x700E, 0xAA54);
  382.  
  383. extern pascal OSErr GetTextServiceLanguage(ScriptLanguageRecord *slRecordPtr)
  384.  TWOWORDINLINE(0x700F, 0xAA54);
  385.  
  386. extern pascal Boolean TSMEvent(EventRecord *event)
  387.  TWOWORDINLINE(0x7004, 0xAA54);
  388.  
  389. extern pascal Boolean TSMMenuSelect(long menuResult)
  390.  TWOWORDINLINE(0x7005, 0xAA54);
  391.  
  392. extern pascal OSErr InitTSMAwareApplication(void )
  393.  TWOWORDINLINE(0x7014, 0xAA54);
  394.  
  395. extern pascal OSErr CloseTSMAwareApplication(void )
  396.  TWOWORDINLINE(0x7015, 0xAA54);
  397.  
  398. /* Component Manager Interfaces to Input Methods */
  399. extern pascal ComponentResult GetScriptLanguageSupport(ComponentInstance ts, ScriptLanguageSupportHandle *scriptHdl)
  400.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0001, 0x7000, 0xA82A);
  401.  
  402. extern pascal ComponentResult InitiateTextService(ComponentInstance ts)
  403.  FIVEWORDINLINE(0x2F3C, 0x0000, 0x0002, 0x7000, 0xA82A);
  404.  
  405. extern pascal ComponentResult TerminateTextService(ComponentInstance ts)
  406.  FIVEWORDINLINE(0x2F3C, 0x0000, 0x0003, 0x7000, 0xA82A);
  407.  
  408. extern pascal ComponentResult ActivateTextService(ComponentInstance ts)
  409.  FIVEWORDINLINE(0x2F3C, 0x0000, 0x0004, 0x7000, 0xA82A);
  410.  
  411. extern pascal ComponentResult DeactivateTextService(ComponentInstance ts)
  412.  FIVEWORDINLINE(0x2F3C, 0x0000, 0x0005, 0x7000, 0xA82A);
  413.  
  414. extern pascal ComponentResult TextServiceEvent(ComponentInstance ts, short numOfEvents, EventRecord *event)
  415.  FIVEWORDINLINE(0x2F3C, 0x0006, 0x0006, 0x7000, 0xA82A);
  416.  
  417. extern pascal ComponentResult GetTextServiceMenu(ComponentInstance ts, MenuHandle *serviceMenu)
  418.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0007, 0x7000, 0xA82A);
  419.  
  420. extern pascal ComponentResult TextServiceMenuSelect(ComponentInstance ts, MenuHandle serviceMenu, short item)
  421.  FIVEWORDINLINE(0x2F3C, 0x0006, 0x0008, 0x7000, 0xA82A);
  422.  
  423. extern pascal ComponentResult FixTextService(ComponentInstance ts)
  424.  FIVEWORDINLINE(0x2F3C, 0x0000, 0x0009, 0x7000, 0xA82A);
  425.  
  426. extern pascal ComponentResult SetTextServiceCursor(ComponentInstance ts, Point mousePos)
  427.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x000A, 0x7000, 0xA82A);
  428.  
  429. extern pascal ComponentResult HidePaletteWindows(ComponentInstance ts)
  430.  FIVEWORDINLINE(0x2F3C, 0x0000, 0x000B, 0x7000, 0xA82A);
  431.  
  432. extern pascal OSErr GetServiceList(short numOfInterface, OSType *supportedInterfaceTypes, TextServiceListHandle *serviceInfo, long *seedValue)
  433.  TWOWORDINLINE(0x7008, 0xAA54);
  434.  
  435. extern pascal OSErr OpenTextService(TSMDocumentID idocID, Component aComponent, ComponentInstance *aComponentInstance)
  436.  TWOWORDINLINE(0x7009, 0xAA54);
  437.  
  438. extern pascal OSErr CloseTextService(TSMDocumentID idocID, ComponentInstance aComponentInstance)
  439.  TWOWORDINLINE(0x700A, 0xAA54);
  440.  
  441. #endif
  442.  
  443. #if PRAGMA_ALIGN_SUPPORTED
  444. #pragma options align=reset
  445. #endif
  446.  
  447. #if PRAGMA_IMPORT_SUPPORTED
  448. #pragma import off
  449. #endif
  450.  
  451. #ifdef __cplusplus
  452. }
  453. #endif
  454.  
  455. #endif /* __TEXTSERVICES__ */
  456.  
  457.